在Visual Studio 2005 C++编译器上,当我的代码使用fopen和此类调用时,我收到以下警告.
1>foo.cpp(5) : warning C4996: 'fopen' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen'
1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?
我正在使用C进入CMAKE,实际上我正在创建两个非常小的静态库.
我的目标是:
-lnameoflib,这是一个编译器标志.好.我准备好了我的CMakeLists.txt,它实际上将*.a文件复制到/ usr/local/lib中.但是,为了能够在程序中使用它们,我还需要将它们的头文件复制到/ usr/include中,然后我可以轻松地将它们包含在内/usr/local/lib.这就是我现在理解的方式.我的问题是 - 如何使用CMAKE将头文件复制到/ usr/include文件夹中的正确方法是什么?我想在/usr/local/include执行时自动复制它们,比如*.a文件.
对于这两个库,我有一个熟悉的CMakeLists.txt:
project(programming-network)
add_library(programming-network STATIC
send_string.c
recv_line.c
)
INSTALL(TARGETS programming-network
DESTINATION "lib"
)
Run Code Online (Sandbox Code Playgroud) 添加在数学上保持关联属性:
(a + b) + c = a + (b + c)
Run Code Online (Sandbox Code Playgroud)
在一般情况下,此属性不适用于浮点数,因为它们表示有限精度的值.
作为优化的一部分,是否允许编译器在从C程序生成机器代码时进行上述替换?它在C标准中的确切位置在哪里?
我想知道是否有人可以告诉我如何有效地使用循环平铺/循环阻塞来进行大密集矩阵乘法.我正在使用1000x1000矩阵进行C = AB.我已经按照维基百科上的示例进行循环平铺,但是使用平铺比使用平铺更糟糕.
http://en.wikipedia.org/wiki/Loop_tiling
我在下面提供了一些代码.由于缓存未命中,天真的方法非常慢.转置方法在缓冲区中创建B的转置.这种方法给出了最快的结果(矩阵乘法为O(n ^ 3)并且转置为O(n ^ 2),因此转置至少快1000倍).没有阻塞的wiki方法也很快,不需要缓冲区.阻塞方法较慢.阻塞的另一个问题是它必须多次更新块.这对线程/ OpenMP来说是一个挑战,因为如果不小心它会导致竞争条件.
我应该指出,使用AVX修改转置方法,我得到的结果比Eigen快.但是,我的SSE结果比Eigen慢一点,所以我想我可以更好地使用缓存.
编辑:我想我知道自己想做什么.它来自1969年的Cannon算法.http:
//en.wikipedia.org/wiki/Matrix_multiplication#Communication-avoiding_and_distributed_algorithms
我需要做的块矩阵乘法,并具有每个线程处理的一个子矩阵C ^而非阿和乙.例如,如果我将矩阵分成四个块.我会做:
+-+ +-+ +-+ +-+ +-+ +-+
| | | | | |
| C1 C2 | | A1 A2 | | B1 B2 |
| | = | | x | |
| C3 C4 | | A3 A4 | | B3 B4 |
| | | | | |
+-+ +-+ +-+ +-+ …Run Code Online (Sandbox Code Playgroud) 我正在测试新的CUDA 8以及Pascal Titan X GPU,并期待我的代码加速,但由于某种原因它最终会变慢.我在Ubuntu 16.04上.
以下是可以重现结果的最小代码:
CUDASample.cuh
class CUDASample{
public:
void AddOneToVector(std::vector<int> &in);
};
Run Code Online (Sandbox Code Playgroud)
CUDASample.cu
__global__ static void CUDAKernelAddOneToVector(int *data)
{
const int x = blockIdx.x * blockDim.x + threadIdx.x;
const int y = blockIdx.y * blockDim.y + threadIdx.y;
const int mx = gridDim.x * blockDim.x;
data[y * mx + x] = data[y * mx + x] + 1.0f;
}
void CUDASample::AddOneToVector(std::vector<int> &in){
int *data;
cudaMallocManaged(reinterpret_cast<void **>(&data),
in.size() * sizeof(int),
cudaMemAttachGlobal);
for (std::size_t i = 0; i < in.size(); …Run Code Online (Sandbox Code Playgroud) 我想有一个函数可以检测数组中局部最大值/最小值的位置(即使有一组局部最大值/最小值).例:
鉴于阵列
test03 = np.array([2,2,10,4,4,4,5,6,7,2,6,5,5,7,7,1,1])
Run Code Online (Sandbox Code Playgroud)
我想有一个输出像:
set of 2 local minima => array[0]:array[1]
set of 3 local minima => array[3]:array[5]
local minima, i = 9
set of 2 local minima => array[11]:array[12]
set of 2 local minima => array[15]:array[16]
Run Code Online (Sandbox Code Playgroud)
从示例中可以看出,不仅检测到奇异值,还检测局部最大值/最小值.
我知道在这个问题中有很多好的答案和想法,但是他们都没有完成所描述的工作:他们中的一些人只是忽略了数组的极端点而忽略了局部最小值/最大值的集合.
在提出这个问题之前,我自己编写了一个函数,它完全按照上面的描述进行(函数在这个问题的最后:local_min(a).通过我做的测试,它可以正常工作).
问题:但是,我也确信这不是使用Python的最佳方式.我可以使用内置函数,API,库等吗?还有其他功能建议吗?一行指令?一个完整的矢量解决方案?
def local_min(a):
candidate_min=0
for i in range(len(a)):
# Controlling the first left element
if i==0 and len(a)>=1:
# If the first element is a singular local minima
if a[0]<a[1]:
print("local minima, i …Run Code Online (Sandbox Code Playgroud) 我使用该命令history | grep <key_word>查找历史记录中具有该特定key_word 的所有命令。这很好,但有时还不够:我希望看到每个结果之前的 N 个命令和之后的 M 个命令。
例如history | grep build,我想查看每个结果之前的 N=10 个命令和之后的 M=5 个命令。以以下理想输出为目标:
1209 git status
1210 git add .
1211 git commit -m 'bla bla bla'
1212 git push http://xxx.xxx.xx.x:xxxxx/
1213 git tag
1214 source tools/settings.sh
1215 cd demos/xxxxxxx/
1216 xxxxxxx
1217 cd demos/wait_zcu102/
1218 ls
1219 cd build.sw/ <------------------------------------- <key_word> is here
1220 ls
1221 atom .
1222 source tools/settings.sh
1223 cd demos/xxxxxxxxx/
1224 xxxxx
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我对Nvidia的这个API很新,有些表达对我来说不太清楚.我想知道是否有人可以帮我理解何时以及如何以简单的方式使用这些CUDA命令.更确切地说:
研究如何通过并行执行内核(例如使用CUDA)来加速某些应用程序,在某些时候我遇到了加速主机 - 设备交互的问题.我有一些信息,在网上冲浪,但我有点困惑.很明显,当可以使用cudaHostRegister()和/或时,你可以更快cudaHostAlloc().在这里解释说
"您可以使用该
cudaHostRegister()命令获取一些数据(已经分配)并将其固定,以避免额外的副本进入GPU".
"记住内存"是什么意思?为什么这么快?我以前如何在这个领域做到这一点?之后,在链接的同一视频中,他们继续解释这一点
"如果你正在传输PINNED内存,你可以使用异步内存传输
cudaMemcpyAsync(),这让CPU在内存传输过程中继续工作".
PCIe事务是否完全由CPU管理?是否有公交车经理负责这件事?也非常感谢部分答案在最后重新组合拼图.
在OpenCL中有一些关于等效API的链接也很感激.
当尝试为 python 2.7 安装 qt4 时(我需要运行其他开发人员编写的一些脚本):
\n\n$ sudo pip install PyQt4\n\nCould not find a version that satisfies the requirement PyQt4 (from versions: )\nNo matching distribution found for PyQt4\n\nRun Code Online (Sandbox Code Playgroud)\n\n附加信息:
\n\n$ python --version\nPython 2.7.15+\n\n$ pip list\nPackage Version\n---------- -------\nnumpy 1.16.5 \npip 19.3 \npyqtgraph 0.10.0 \nsetuptools 41.4.0 \nwheel 0.33.6 \nRun Code Online (Sandbox Code Playgroud)\n\n关于如何安装有什么建议吗?
\n\n请注意,我已经尝试过此处提出的解决方案:
\n\npip install PyQt4-4.11.4-cp35-none-win_amd64.whl\n\nERROR: PyQt4-4.11.4-cp35-none-win_amd64.whl is not a supported wheel on this platform.\n\nRun Code Online (Sandbox Code Playgroud)\n\n我想是因为它不是Windows平台,不是吗?我正在尝试在 XUbuntu 18.04 上安装它。
\n\n正如 @phd 的评论之一所建议的“PyQt4-4.11.4-cp35-none-win_amd64.whl 适用于 …
c ×3
cuda ×2
python ×2
algorithm ×1
arrays ×1
bash ×1
c++ ×1
cmake ×1
deprecated ×1
fopen ×1
gpgpu ×1
grep ×1
installation ×1
linux ×1
math ×1
numpy ×1
nvcc ×1
nvidia ×1
opencl ×1
openmp ×1
performance ×1
pip ×1
python-3.x ×1
qt4 ×1
spyder ×1
sse ×1
text-editor ×1
visual-c++ ×1