Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor CUDA Directory #1634

Closed
gangliao opened this issue Mar 17, 2017 · 8 comments
Closed

Refactor CUDA Directory #1634

gangliao opened this issue Mar 17, 2017 · 8 comments
Assignees

Comments

@gangliao
Copy link
Contributor

gangliao commented Mar 17, 2017

The requirement of re-factoring CUDA directory from #1607 @gangliao, #1116 @hedaoyuan, and ARM @Xreki.

背景问题:

目前cuda目录包含不同架构甚至不同SIMD指令集的代码,逐渐出现各种不同程度的问题,比如:无法发布Paddle的单一CPU版本问题,function重构问题,ARM的扩展问题,以及今后的opencl问题。

为了有效的解决上述问题,我们需要调整cuda目录结构,使其更具可扩展性。

@gangliao
Copy link
Contributor Author

gangliao commented Mar 17, 2017

我想象中的cuda目录结构是:

~/kernels> tree -a
.
├── cpu目录
│   ├── arm目录
│   └── x86目录
│       ├── avx目录
│       └── sse目录
|       |---naive源代码(感觉还是不需要新建naive目录)
|
├── gpu目录
│   ├── cuda目录
│   └── opencl目录
└── include目录

@hedaoyuan
Copy link
Contributor

嗯,这里可以只考虑涉及指令集相关的代码调整。我觉得可以先列一下哪些文件是相关的,然后再考虑怎么重构。另外,我觉得现在的指令集相关的代码没有特别多,可能不需要分这么细的目录。

@hedaoyuan
Copy link
Contributor

@gangliao 讨论了一下,一种简单的做法是可以在编译的时候记下当前编译时是否添加了-mavx选项,运行时check编译选项和机器cpu特性是否匹配。比如:

  1. 编译的时候是添加了-mavx选项,运行机器不支持avx,则在init的时候直接报错,避免运行过程中出现SIGILL错误;
  2. 相反,如果编译时没有添加-mavx选项,运行机器是支持的,可以提示代码可以通过添加-mavx选项进行优化;

@gangliao
Copy link
Contributor Author

gangliao commented Mar 20, 2017

这里的编译的时候记下当前编译选项,其实就是通过 __AVX__, __SSE__等等宏来做运行时check

@hedaoyuan
Copy link
Contributor

是的,可以写一个check函数,放到InitFunction里面。

@Xreki
Copy link
Contributor

Xreki commented Mar 20, 2017

  • 以上讨论的check函数好像只是给用户重新编译一遍Paddle时,cmake选项配置的建议。@gangliao 的目的应该是让用户可以完全不用配置cmake选项。
  • 当前编译选项的配置是,if WITH_AVX then use avx; else use sse,不好灵活地增加新的指令集支持。

因此,我觉得从源码、cmake方面,都很有必要重构一下。

@gangliao
Copy link
Contributor Author

gangliao commented Mar 20, 2017

@Xreki 今天和@hedaoyuan讨论了一番,目前采用类似于TF的方法(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/cpu_feature_guard.cc https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/cpu_info.h
http://stackoverflow.com/questions/41293077/how-to-compile-tensorflow-with-sse4-2-and-avx-instructions )可能更加省事一些。默认编译基础版本(sse),运行时如果check发现系统支持更高级的超指令集,会warning提醒用户,可以编译更优化的版本。
如果手动设置-mavx编译, 运行时check 当前系统是否支持,不支持直接报错提醒。

这种做法,优点:对目前的代码改动较小,否则需要更改大量代码和编译。缺点:其实没有做动态的切换。

@gangliao
Copy link
Contributor Author

先close这个issue,我重新在design doc里面描述。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants