小编use*_*820的帖子

Python ftplib最佳块大小?

我正在使用python的ftplib将大量的数据(大约100个文件X 2GB)通过本地网络传输到FTP服务器.此代码在Ubuntu上运行.这是我的调用(self是我的FtpClient对象,它是ftplib客户端的包装器):

# Store file.      
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何选择最佳块大小?我的理解是,最佳块大小取决于许多事情,其中​​最重要的是连接速度和延迟.我的代码将在许多不同的网络上运行,这些网络具有不同的速度和全天不同的拥塞量.理想情况下,我想在运行时计算最佳块大小.

最佳FTP传输块大小是否与最佳TCP窗口大小相同?如果这是真的,并且打开了TCP窗口缩放,是否有办法从内核获得最佳的TCP窗口大小?linux内核如何/何时确定最佳窗口大小?理想情况下,我可以向linux内核询问最佳块大小,以避免重新发明轮子.

python ftp

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

AVX2,如何有效地将四个整数加载到偶数256位寄存器的指数并复制到奇数指数?

我在内存中有一个对齐的整数数组,包含索引I0,I1,I2,I3.我的目标是将它们放入包含I0,I0 + 1,I1,I1 + 1,I2,I2 + 1,I3,I3 + 1的__m256i寄存器中.困难的部分是将它们作为I0,I0进入256位寄存器,I1,I1,I2,I2,I3,I3,之后我可以添加一个包含0,1,0,1,0,1,0,1的寄存器.

我发现了内部的_mm256_castsi128_si256,它允许我将4个整数加载到256位寄存器的低128位,但我很难找到最好的内在函数从那里使用.

任何帮助,将不胜感激.我可以访问所有SSE版本,AVX和AVX2,并且只想使用内在函数来执行此操作.

编辑:

我认为这是有效的,但在测试它的过程中我的效率并不高.

// _mm128_load_si128: Loads 4 integer values into a temporary 128bit register.
// _mm256_broadcastsi128_si256: Copies 4 integer values in the 128 bit register to the low and high 128 bits of the 256 bit register.
__m256i tmpStuff = _mm256_broadcastsi128_si256 ((_mm_load_si128((__m128i*) indicesArray)));

// _mm256_unpacklo_epi32: Interleaves the integer values of source0 and source1.
__m256i indices = _mm256_unpacklo_epi32(tmpStuff, tmpStuff);

__m256i regToAdd = _mm256_set_epi32 (0, 1, 0, 1, 0, 1, 0, 1); …
Run Code Online (Sandbox Code Playgroud)

x86 sse simd avx avx2

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

需要帮助清理模板即时框架

我一直在研究一个框架,以帮助功能模板即时.我有一堆函数,由整数值模板化以进行优化,需要在运行时进行实例化和选择.用法示例如下:

// Function to instantiate templates of.
template<int a, int b, int c> void MyFunction(float, double){};

// List of values to substitute into each template parameter.
typedef mpl::vector_c< int, 7, 0, 3, 4, 2> valuesToInstantiate;
int numberOfValuesPerParameter = size<valuesToInstantiate>::type::value;

// Function pointer type. Must define type for array to hold template instantiations.
typedef void (*MyFunctionPointer)(float, double);

// Array to hold template instantiations.
// Accessed at runtime to get proper instantiation.
MyFunctionPointer arrayOfTemplateInstantiations[numberOfValuesPerParameter*numberOfValuesPerParameter*numberOfValuesPerParameter];

// Passed to template instantiation framework.
// AddTemplate …
Run Code Online (Sandbox Code Playgroud)

c++ templates boost instantiation

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

Python SSL 套接字客户端身份验证

我正在尝试在 python 中设置服务器和客户端,其中服务器使用带有证书的 SSL 对客户端进行身份验证。网上有很多 SSL 证书的示例,但我发现的所有内容都是服务器向客户端提供证书并由客户端检查它。我需要服务器来确保客户端有权限连接到服务器。我了解如何生成和发送证书及其工作原理。我会输入我的代码,但是我的客户端/服务器在没有 SSL 的情况下工作正常,并且我一直在引用来获取 SSL。该页面底部的客户端/服务器示例总结了我对 python 中 SSL 证书的理解。

我意识到这没什么可继续的,但如果有人可以解释对该示例的基本修改,让服务器对客户端进行身份验证,而不是相反,那就太棒了。或者,指向示例的链接甚至只是一些要研究的套接字方法都会非常有帮助。如果需要更多信息,请告诉我。我并不是想含糊其辞并保证我自己花了整个上午寻找信息:)。

编辑:我试图坚持基本的 ssl 库。又名“导入 ssl”。

python ssl certificate

5
推荐指数
1
解决办法
6427
查看次数

malloc_trim(0) 发布 Thread Arenas 的 Fastbins?

在过去一周左右的时间里,我一直在调查应用程序中内存使用量随时间累积的问题。我把它缩小到复制一个的行

std::vector< std::vector< std::vector< std::map< uint, map< uint, std::bitset< N> > > > > >

在工作线程中(我意识到这是一种组织内存的荒谬方式)。工作线程会定期被销毁、重新创建,并在线程启动时复制该内存结构。被复制的原始数据通过主线程的引用传递给工作线程。

使用 malloc_stat 和 malloc_info,我可以看到当工作线程被销毁时,它使用的 arena/heap 将用于该结构的内存保留在其 fastbins 的空闲列表中。这是有道理的,因为有许多小于 64 字节的单独分配。

问题是,当工作线程被重新创建时,它会创建一个新的 arena/heap 而不是重用前一个,这样来自先前 arenas/heap 的 fastbins 永远不会被重用。最终,系统会在重用之前的堆/arena 来重用他们持有的 fastbin 之前耗尽内存。

有点意外,我发现在我的主线程中调用 malloc_trim(0),在加入工作线程后,会导致线程 arenas/heap 中的 fastbins 被释放。据我所知,这种行为没有记录。有人有解释吗?

这是我用来查看此行为的一些测试代码:

// includes
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>
#include <mcheck.h>
#include <malloc.h>
#include <map>
#include <bitset>
#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>

// Number of bits per bitset.
const int sizeOfBitsets …
Run Code Online (Sandbox Code Playgroud)

c++ malloc multithreading glibc

5
推荐指数
1
解决办法
1588
查看次数

如何在没有nvcc的情况下在编译时获取CUDA工具包版本?

我在.cpp文件中调用cuSPARSE库,这些调用在旧工具包中不可用.为了支持使用旧工具包的系统,我想使用编译器指令编译不同的代码段.特别是,我想使用CSR格式的矩阵解决旧工具包的稀疏三角形系统和新工具包的BSR格式.

问题是,我没有在本节中使用nvcc编译任何实际的CUDA代码,只是进行库调用,因此获取版本信息的nvcc宏不可用.

cuda.h中有__CUDA_API_VERSION的#define,但在编译我的.cpp时它是0,无论我是否包含cuda.h.

在这种情况下,如何在编译时获取有关工具包版本的信息?我在CentOS 7工作,用g ++编译我的.cpp.

c++ cuda

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

标签 统计

c++ ×3

python ×2

avx ×1

avx2 ×1

boost ×1

certificate ×1

cuda ×1

ftp ×1

glibc ×1

instantiation ×1

malloc ×1

multithreading ×1

simd ×1

sse ×1

ssl ×1

templates ×1

x86 ×1