小编Leo*_*313的帖子

fopen弃用警告

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)

我该如何防止这种情况?

fopen deprecated visual-c++

66
推荐指数
5
解决办法
16万
查看次数

CMAKE - 如何正确地将静态库的头文件复制到/ usr/include中?

我正在使用C进入CMAKE,实际上我正在创建两个非常小的静态库.

我的目标是:

  1. 这些库被编译并链接到*.a文件中.[这个作品]
  2. 然后我希望将*.a文件复制到/ usr/local/lib [这也是工作]
  3. 据我所知,库(很少),它们是使用链接-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)

c cmake static-libraries

44
推荐指数
4
解决办法
4万
查看次数

C中的浮点运算是关联的吗?

添加在数学上保持关联属性:

(a + b) + c = a + (b + c)
Run Code Online (Sandbox Code Playgroud)

在一般情况下,此属性不适用于浮点数,因为它们表示有限精度的值.

作为优化的一部分,是否允许编译器在从C程序生成机器代码时进行上述替换?它在C标准中的确切位置在哪里?

c math floating-point compiler-optimization

22
推荐指数
2
解决办法
3712
查看次数

循环平铺/阻塞用于大密集矩阵乘法

我想知道是否有人可以告诉我如何有效地使用循环平铺/循环阻塞来进行大密集矩阵乘法.我正在使用1000x1000矩阵进行C = AB.我已经按照维基百科上的示例进行循环平铺,但是使用平铺比使用平铺更糟糕.

http://en.wikipedia.org/wiki/Loop_tiling

http://software.intel.com/en-us/articles/how-to-use-loop-blocking-to-optimize-memory-use-on-32-bit-intel-architecture

我在下面提供了一些代码.由于缓存未命中,天真的方法非常慢.转置方法在缓冲区中创建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)

c performance sse openmp matrix-multiplication

16
推荐指数
1
解决办法
1万
查看次数

在 Spyder 文本编辑器中选择垂直文本

有没有办法在 Spyder3 文本编辑器中垂直选择文本?我的意思是相当于Atom 文本编辑器中的Alt+ Shift,例如:

在此处输入图片说明

text-editor spyder

12
推荐指数
1
解决办法
3811
查看次数

使用cudaMallocManaged时,为什么NVIDIA Pascal GPU在运行CUDA内核时会变慢

我正在测试新的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)

c++ cuda gpgpu nvidia nvcc

10
推荐指数
1
解决办法
3344
查看次数

在1D-NumPy阵列中查找单个/一组局部最大值/最小值(再次)

我想有一个函数可以检测数组中局部最大值/最小值的位置(即使有一组局部最大值/最小值).例:

鉴于阵列

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)

python arrays algorithm numpy python-3.x

9
推荐指数
2
解决办法
658
查看次数

历史| grep &lt;key_word&gt;:如何可视化围绕已创建命令的更多行?

我使用该命令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)

有没有办法做到这一点?

linux bash grep

7
推荐指数
1
解决办法
2980
查看次数

何时使用cudaHostRegister()和cudaHostAlloc()?"固定或页面锁定"内存的含义是什么?哪些在OpenCL中是等效的?

我对Nvidia的这个API很新,有些表达对我来说不太清楚.我想知道是否有人可以帮我理解何时以及如何以简单的方式使用这些CUDA命令.更确切地说:

研究如何通过并行执行内核(例如使用CUDA)来加速某些应用程序,在某些时候我遇到了加速主机 - 设备交互的问题.我有一些信息,在网上冲浪,但我有点困惑.很明显,当可以使用cudaHostRegister()和/或时,你可以更快cudaHostAlloc().在这里解释说

"您可以使用该cudaHostRegister()命令获取一些数据(已经分配)并将其固定,以避免额外的副本进入GPU".

"记住内存"是什么意思?为什么这么快?我以前如何在这个领域做到这一点?之后,在链接的同一视频中,他们继续解释这一点

"如果你正在传输PINNED内存,你可以使用异步内存传输cudaMemcpyAsync(),这让CPU在内存传输过程中继续工作".

PCIe事务是否完全由CPU管理?是否有公交车经理负责这件事?也非常感谢部分答案在最后重新组合拼图.

在OpenCL中有一些关于等效API的链接也很感激.

memory-management cuda opencl

6
推荐指数
2
解决办法
1947
查看次数

找不到满足 PyQt4 要求的版本(来自版本:)

当尝试为 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\n
Run 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 \n
Run Code Online (Sandbox Code Playgroud)\n\n

关于如何安装有什么建议吗?

\n\n

请注意,我已经尝试过此处提出的解决方案:

\n\n
pip 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想是因为它不是Windows平台,不是吗?我正在尝试在 XUbuntu 18.04 上安装它。

\n\n

正如 @phd 的评论之一所建议的“PyQt4-4.11.4-cp35-none-win_amd64.whl 适用于 …

python installation pip qt4

6
推荐指数
2
解决办法
1万
查看次数